package Main;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.rmi.NotBoundException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;

import MachineLearning.LinearRegression;
import QueryPlan.QueryPlanBuilder;
import SLA.SLA;
import Server.Server;

public class Main {
	/*Input: quantum(x da funcao F_part),arquivo que contem a consulta original,
	 * arquivo que contem a descricao do sla e dos agentes,numero de agentes*/
	
	public static void main(String[] args){
		try {
			LinearRegression machine = new LinearRegression(Double.parseDouble(args[5]), Double.parseDouble(args[6]));
			Server s = new Server();
			QueryPlanBuilder q = new QueryPlanBuilder();
			ArrayList<String> queries = q.buildPlan(Double.parseDouble(args[0]), args[1]); //F_part, consulta.txt
			ArrayList<String> qu = new ArrayList<String>();
			qu.addAll(queries);
			
			int load = Integer.parseInt(args[2]);
			while(load>1){
				queries.addAll(qu);
				load--;
			}
			
			s.dispatchQuery(args[3],queries,Integer.parseInt(args[4]));
		} catch (NumberFormatException e) {
			System.out.println("Falha na conversao de tipos!");
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println("Falha na abertura do arquivo dado de entrada com os agentes cadastrados!");
			e.printStackTrace();
		} catch (NotBoundException e) {
			System.out.println("Falha ao acessar objeto remoto!");
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			System.out.println("Falha na abertura da conexão com o banco!");
			e.printStackTrace();
		} catch (SQLException e) {
			System.out.println("Falha na abertura da conexão com o banco!");
			e.printStackTrace();
		}
	}
}
